package org.jeecg.common.util;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 数组到字符串的JSON反序列化器
 * 将JSON数组转换为逗号分隔的字符串
 */
public class ArrayToStringDeserializer extends JsonDeserializer<String> {
    
    @Override
    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        JsonToken token = p.getCurrentToken();
        
        if (token == JsonToken.VALUE_STRING) {
            // 如果已经是字符串，直接返回
            return p.getValueAsString();
        } else if (token == JsonToken.START_ARRAY) {
            // 如果是数组，转换为逗号分隔的字符串
            List<String> values = new ArrayList<>();
            while (p.nextToken() != JsonToken.END_ARRAY) {
                if (p.getCurrentToken() == JsonToken.VALUE_STRING) {
                    values.add(p.getValueAsString());
                } else if (p.getCurrentToken() == JsonToken.VALUE_NUMBER_INT) {
                    values.add(String.valueOf(p.getValueAsLong()));
                } else if (p.getCurrentToken() != JsonToken.VALUE_NULL) {
                    values.add(p.getValueAsString());
                }
            }
            return String.join(",", values);
        } else if (token == JsonToken.VALUE_NULL) {
            return null;
        } else {
            // 其他情况尝试转换为字符串
            return p.getValueAsString();
        }
    }
}
